package com.cazor.common.utils.map;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

@Slf4j
public class BaiduMapUtil {

    final static String baiduMapApi = "https://api.map.baidu.com/";
    final static String ak = "Abt0vx7MgXTiGSfjF3ODIIGNWKYWuG39";

    public static String geoconv(String lo, String la, int from, int to){

        return geoconv(lo+","+la, from, to);
    }

    /**
     *
     * @param lola 经度,维度
     * @param from 源坐标类型：
     * 1：GPS标准坐标；
     * 2：搜狗地图坐标；
     * 3：火星坐标（gcj02），即高德地图、腾讯地图和MapABC等地图使用的坐标；
     * 4：3中列举的地图坐标对应的墨卡托平面坐标;
     * 5：百度地图采用的经纬度坐标（bd09ll）；
     * 6：百度地图采用的墨卡托平面坐标（bd09mc）;
     * 7：图吧地图坐标；
     * 8：51地图坐标；
     * @param to 目标坐标类型：
     * 3：火星坐标（gcj02），即高德地图、腾讯地图及MapABC等地图使用的坐标；
     * 5：百度地图采用的经纬度坐标（bd09ll）；
     * 6：百度地图采用的墨卡托平面坐标（bd09mc）；
     * @return
     */
    public static String geoconv(String lola, int from, int to){
        StringBuilder sb = new StringBuilder(baiduMapApi);
        sb.append("geoconv/v1/?coords=").append(lola).append("&from=").append(from).append("&to=").append(to).append("&ak=").append(ak);
        String url = sb.toString();
//        log.info("geoconv-url={}", url);

        String respStr = doGet(url);
        if (StringUtils.isNotBlank(respStr)) {
            JSONObject respJson = JSON.parseObject(respStr);
            if (respJson.getInteger("status") == 0) {
                JSONArray results = respJson.getJSONArray("result");
                if (CollectionUtil.isNotEmpty(results)) {
                    JSONObject xy = results.getJSONObject(0);
                    return xy.getString("x") + "," + xy.getString("y");
                } else {
                    log.warn("results is empty");
                }
            } else {
                log.warn("status is not 0--{}",respStr);
            }
        } else {
            log.warn("respStr is blank");
        }
        return null;
    }

    public static String doGet(String url) {
        HttpRequest request = HttpRequest.get(url);
        request.timeout(5000);
        try {
            String response = request.execute().body();
            return StringUtils.trim(response);
        }catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
